using Lzfy_His_Service.Models;

namespace Lzfy_His_Service.Services
{
    /// <summary>
    /// 坐席账号管理服务接口
    /// </summary>
    public interface IAgentAccountService
    {
        /// <summary>
        /// 申请坐席账号使用权
        /// </summary>
        /// <param name="request">申请请求</param>
        /// <returns>申请结果，成功返回账号信息，失败返回null</returns>
        Task<AgentAccountResponse?> ApplyAccountAsync(AgentAccountApplyRequest request);

        /// <summary>
        /// 确认或取消确认坐席账号使用权
        /// </summary>
        /// <param name="request">确认请求</param>
        /// <returns>操作结果</returns>
        Task<bool> ConfirmAccountAsync(AgentAccountConfirmRequest request);

        /// <summary>
        /// 记录用户操作时间
        /// </summary>
        /// <param name="request">操作记录请求</param>
        /// <returns>操作结果</returns>
        Task<bool> RecordActionAsync(AgentAccountActionRequest request);

        /// <summary>
        /// 获取用户当前使用的坐席账号
        /// </summary>
        /// <param name="username">用户名</param>
        /// <returns>账号信息，如果没有则返回null</returns>
        Task<AgentAccountResponse?> GetUserCurrentAccountAsync(string username);

        /// <summary>
        /// 定时清理过期的坐席账号权限
        /// </summary>
        /// <returns>清理的账号数量</returns>
        Task<int> CleanupExpiredAccountsAsync();

        /// <summary>
        /// 获取所有可用的坐席账号列表（管理员功能）
        /// </summary>
        /// <returns>账号列表</returns>
        Task<List<AgentAccountResponse>> GetAllAccountsAsync();

        /// <summary>
        /// 获取坐席使用状态统计
        /// </summary>
        /// <returns>坐席使用状态统计信息</returns>
        Task<AgentAccountStatusResponse> GetAccountStatusAsync();

        /// <summary>
        /// 获取用户坐席申请状态
        /// </summary>
        /// <param name="username">用户名</param>
        /// <returns>用户坐席状态信息</returns>
        Task<UserAgentStatusResponse> GetUserAgentStatusAsync(string username);

        /// <summary>
        /// 清理未使用坐席账号的手机号（管理员功能）
        /// </summary>
        /// <returns>成功清理的手机号数量</returns>
        Task<int> CleanupAccountsPhoneAsync();
    }
}